A portion of the disclosure of this patent document contains material that is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever.
1. Field of the Invention
The invention relates to Hypertext Transfer Protocol (HTTP) request processing. More particularly, the present invention relates to a system and method for processing an HTTP request.
2. Background of the Prior Art
FIG. 2 shows a functional block diagram of a website application that processes an HTTP request in a conventional manner. A web browser 201 located at a client computer 202 sends an HTTP request over a computer network 203, such as the Internet, in a well-known manner to a host server computer 204 for a selected URL 205. Host server computer 204, which runs an application 206 that is particular to host server computer 204, receives the HTTP request, and based on the contents of the request and the processing of application 206, accesses the content of requested web page 205. Before the response to the HTTP request is sent to web browser 201 by web server 207, application 206 creates the requested web page 205 using software running on host server computer 204 and, depending upon the content of web page 205, a web service 208, such as a web service proxy.
Application 206 can also process the request in a selected manner before and/or after the software funning on host server computer 204 creates the requested page by using functional modules 209, for example, for authenticating the requesting user, determining whether the requesting user is authorized to access the requested web page, encrypting the response, etc. Functional modules 209, such as JAVA servlets, process an HTTP request in a sequential manner. That is, functional module 209a is selected to process the request before functional module 209b processes the request, and functional module 209c, in turn, is selected to process the request after functional module 209b. For example, functional module 209a could provide user authentication for application 206. Once the user has been authenticated, functional module 209b could provide user authorization. Subsequently, functional module 209c could provide advertising functionality that is based on the authenticated identification of the requesting user.
When an HTTP application developer needs to change the functionality of application 206 by changing the functionality of modules 209 to include customized features, such as custom logging, Internet-scale security, or data caching, the developer would need to custom generate the functional module and/or use a suitable functional module that was developed by a third party.
A problem with this conventional approach is that an application developer must fully understand the processing of all other functional modules so that a new functional module does conflict with the other functional modules already in place. Moreover, it is difficult for the application developer to know exactly where in the processing sequence to insert a new or an updated functional module. Further, in situations a functional module presends content and/or headers to a requesting user before the software running on host server computer 204 creates the requested web page so that the website appears to the user to be a relatively fast website. Any request processing that is performed by a functional module that is later in the conventional processing sequence can no longer be performed because the content and/or the headers are no longer available for processing.
What is needed is a way for an HTTP application developer to easily add functionality to an HTTP application. Additionally, what is needed is a way to create reusable functionality between applications that HTTP modules developed by different module developers can coexist together in many HTTP applications. Moreover, what is needed is a way to provide processing of an HTTP request that avoids a sequential arrangement of functional modules that may possibly conflict with other functional modules.